위성 사진을 분석해보자
GitHub: Tracefield
시작
네이버 지도 로드뷰를 보다가 문득 든 생각이다. 과거 사진이랑 지금 사진을 나란히 보면 재밌다. 여기 공사하기 전엔 이렇게 생겼었구나 하면서 한참 들여다보게 된다. 그럼 범위를 더 넓히면 어떨까.
당시 미국 주식도 보고 있었는데 우주 섹터가 한창 뜨거웠다. SpaceX 발사 소식이랑 위성 종목이 자꾸 눈에 들어왔다. 위성이라는 단어를 계속 마주치다 보니 위성 사진을 직접 볼 수 있나 궁금해졌다. 찾아보니 ESA(유럽우주국)에서 Sentinel-2라는 위성 영상을 무료로 공개하고 있었다. 지리 정보 쪽 공개 자료도 꽤 많다. 비교해 보면 재밌겠다 싶었다. 달라진 점을 찾아볼 수 있지 않을까. 지리 정보로 쓸 만한 것도 만들 수 있지 않을까까지 갔다.
Sentinel-2
Sentinel-2는 ESA가 운용하는 지구 관측 위성이다. 10m급 해상도의 다분광 영상을 며칠 간격으로 찍어서 통째로 공개한다. Microsoft Planetary Computer나 AWS Earth Search에서 STAC API로 검색할 수 있다. COG(Cloud Optimized GeoTIFF)라는 포맷이라 원하는 영역만 잘라서 읽으면 된다. 전체를 다운로드할 필요가 없다.
로드뷰는 거리 하나를 비교하는 거지만 이건 도시 단위다. 수도권 서부, 부산·울산·경남, 제주 동부 같은 MGRS 타일로 영상이 나뉘어 있다. 규모가 다르다.
해보기로 한 것
식생이랑 수위 변화를 관찰해 보기로 했다. 주제는 침수, 녹지, 도시 표면. 침수면 물이 늘어난 구역을 찾고 녹지면 초록이 줄어든 구역을 찾는 식이다. 도시 표면은 건물이나 도로가 바뀐 구역. before/after 장면을 골라서 겹쳐 보는 흐름이다. 위성을 쓴다는 걸 빼면 원리 자체는 로드뷰 과거 비교와 비슷하다.
구조
Next.js로 프론트를 짜고 FastAPI로 API를 따로 뒀다. 모노레포 안에서 apps/web이랑 apps/api로 나눠 놨다.
프론트 쪽은 MapLibre로 지도를 깔고 폴리곤을 그려서 관심 영역을 고른다. 연도랑 월, 구름 비율 필터로 before/after 후보를 골라서 검색한다. 2015년부터 2026년까지 범위. 두 장면을 고르면 BeforeAfterSlider 컴포넌트로 슬라이더를 밀어가며 전후를 비교할 수 있다.
API 쪽은 STAC 검색이 주된 역할이다. Planetary Computer나 Earth Search에서 Sentinel-2 장면을 조회해서 SceneCandidate 목록을 내려준다. 촬영 시각이랑 구름 비율, 에셋 URL 같은 메타가 딸려 온다.
3D 지구본
Three.js랑 react-globe.gl을 써서 3D 지구본도 달아 봤다. MGRS 타일 경계를 지구본 위에 표시하고 클릭하면 해당 타일의 위성 장면 검색으로 넘어간다. 수도권 서부(52SCG), 부산·울산·경남(52SEE), 제주 서부(52SBD) 같은 식으로 국내 12개 타일을 프리셋으로 넣어 뒀다.
솔직히 실용성보다는 지구본 돌아가는 게 보기 좋아서 넣었다. 분석은 2D 맵 쪽에서 한다.
만들어 본 것
처음부터 완성품을 만들 생각은 없었다. 위성 자료 가져오는 파이프라인이랑 COG를 브라우저에서 쓰는 법, 3D 지구본에 타일을 얹는 것. 이런 걸 한번 해보자는 느낌이었다.
흥미 위주라 시간을 길게 쓰지는 않았다. 로컬에서 돌아가게까지만 맞추고 Docker Compose로 배포 패키징까지만 해 둔 채로 끝냈다.
